芜湖市建设投资有限公司网站,凡科的模板做网站,东莞人才网58,全球著名科技网站目录
1. 建立 Web 网站
2. 编写 Scrapy 爬虫程序 为了说明 scrapy 爬虫爬取网站多个网页数据的过程#xff0c;用 Flask 搭建一个小型的 Web 网站。
1. 建立 Web 网站
#xff08;1#xff09;books.html
!DOCTYPE html
html langen
h… 目录
1. 建立 Web 网站
2. 编写 Scrapy 爬虫程序 为了说明 scrapy 爬虫爬取网站多个网页数据的过程用 Flask 搭建一个小型的 Web 网站。
1. 建立 Web 网站
1books.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titlebooks/title
/head
bodyh3计算机/h3ullia hrefdatabase.html数据库/a/lilia hrefprogram.html程序设计/a/lilia hrefnetwork.html计算机网络/a/li/ul
/body
/html
2databse.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titledatabase/title
/head
bodyh3数据库/h3ullia hrefmysql.htmlMySQL数据库/a/li/ula hrefbooks.htmlHome/a
/body
/html
3program.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titleprogram/title
/head
bodyh3程序设计/h3ullia hrefpython.htmlPython程序设计/a/lilia hrefjava.htmlJava程序设计/a/li/ula hrefbooks.htmlHome/a
/body
/html
4network.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titlenetwork/title
/head
bodyh3计算机网络/h3a hrefbooks.htmlHome/a
/body
/html
5mysql.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titlemysql/title
/head
bodyh3MySQL数据库/h3a hrefbooks.htmlHome/a
/body
/html
6python.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titlepython/title
/head
bodyh3Python程序设计/h3a hrefbooks.htmlHome/a
/body
/html
7java.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titlejava/title
/head
bodyh3Java程序设计/h3a hrefbooks.htmlHome/a
/body
/html 【问题】编写一个爬虫程序爬取这个网站所有的页面的h3标题文字。
服务器程序 server.py 如下
import flask
import osapp flask.Flask(__name__)def getFile(fileName):data bfileName web_html/ fileName # 将7个html页面放到web_html目录下做了个路径拼接if os.path.exists(fileName):fobj open(fileName, rb)data fobj.read()fobj.close()return dataapp.route(/)
def index():return getFile(books.html)app.route(/section)
def process(section):data if section ! :data getFile(section)return dataif __name__ __main__:app.run()2. 编写 Scrapy 爬虫程序 仍然使用4.1节中的爬虫程序项目重新编写MySpider.py程序
爬虫程序 MySpider.py 如下
import scrapyclass MySpider(scrapy.Spider):name mySpiderdef start_requests(self):url http://127.0.0.1:5000yield scrapy.Request(urlurl, callbackself.parse)# 函数start_requests可以用start_urls替换# start_urls [http://127.0.0.1:5000]def parse(self, response, **kwargs):try:print(response.url)data response.body.decode()selector scrapy.Selector(textdata)print(selector.xpath(//h3/text()).extract_first())links selector.xpath(//a/href).extract()for link in links:url response.urljoin(link)yield scrapy.Request(urlurl, callbackself.parse)except Exception as err:print(err)开启 服务器server.py 执行run.py如下 http://127.0.0.1:5000 计算机 http://127.0.0.1:5000/network.html 计算机网络 http://127.0.0.1:5000/program.html 程序设计 http://127.0.0.1:5000/database.html 数据库 http://127.0.0.1:5000/mysql.html MySQL数据库 http://127.0.0.1:5000/java.html Java程序设计 http://127.0.0.1:5000/books.html 计算机 http://127.0.0.1:5000/python.html Python程序设计 scrapy 自动筛选已经访问过的网站我们来分析程序的执行过程 (1) start_urls[http://127.0.0.1:5000] 这是入口地址访问这个地址成功后会回调parse函数 (2) def parse(self, response): 这是回调函数该函数的response对象包含了网站返回的信息 (3) dataresponse.body.decode() selectorscrapy.Selector(textdata) 网站返回的response.body的二进制数据要decode转为文本然后建立Selector对象 (4) print(selector.xpath(//h3/text()).extract_first()) 获取网页中的h3标题的文本这就是要爬取的数据为了简单起见这个数据只有一项 (5) linksselector.xpath(//a/href).extract() 获取所有的a href...链接的 href值组成links列表 (6) for link in links: urlresponse.urljoin(link) yield scrapy.Request(urlurl,callbackself.parse) 访问links的每个link通过urljoin函数与response.url地址组合成完整的 url地址再次建立Request对象回调函数仍然为parse即这个parse函数会被递归调用。其中使用了yield语句返回每个Request对象这是 scrapy程序的要求。