简单的爬虫

一、使用python下载网页代码

from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://movie.douban.com/subject/1292052/')
print(r.text)

二、提取网页中所需的内容

  2.1使用使用CSS 选择器 来提取网页中有价值的信息--例:爬取单个豆瓣网页

    先查看一段内容的代码,在代码上点击右键,选择 Copy -> Copy Selector (或者 Copy CSS Selector、复制 CSS 选择器),就能将这段内容对应的 CSS 选择器复制到剪贴板。

  

from requests_html import HTMLSession
session=HTMLSession()
r=session.get('https://movie.douban.com/subject/1292052/')
title=r.html.find('#content > h1 > span:nth-child(1)',first=True)
# r.html.find() 接受一个 CSS 选择器(字符串形式)作为参数
# 返回在网页中使用该选择器选中的内容。
print(title.text)

   2.2 例:爬取多个豆瓣网页

 1 '''
 2 爬取多个豆瓣网页
 3 '''
 4 from requests_html import  HTMLSession
 5 
 6 links=['https://movie.douban.com/subject/1292052/',
 7       'https://movie.douban.com/subject/1962665/',
 8       'https://movie.douban.com/subject/26752088/'
 9       ]
10 
11 session=HTMLSession()
12 for link in links:
13     r=session.get(link)
14     #r.html.render()
15 
16     title=r.html.find('#content > h1 > span:nth-child(1)',first=True)
17     year=r.html.find('#content > h1 > span.year',first=True)
18     print(title.text,year.text)

 

  2.3 例:爬取新浪财经股票的实时价格 多个

  

'''
例:爬取新浪财经股票的实时价格 多个
'''
from requests_html import  HTMLSession

links=['http://stock.finance.sina.com.cn/usstock/quotes/aapl.html',
      'http://stock.finance.sina.com.cn/usstock/quotes/bidu.html',
      'http://stock.finance.sina.com.cn/usstock/quotes/msft.html'
      ]

session=HTMLSession()
for link in links:
    r=session.get(link)
    r.html.render()

    title=r.html.find('#hqPrice',first=True)
    print(title.text)

 

三、存储格式化数据

CSV格式

Python 提供了标准库 csv 来读写 csv 数据。

import csv

file=open('movies.csv','w',newline='')
csvwriter=csv.writer(file)

csvwriter.writerow(['名称','年份'])

csvwriter.writerow(['A','1992'])
csvwriter.writerow(['B','1998'])
csvwriter.writerow(['C','2010'])

file.close()

 

CSV格式:通常用来存储简单的数据,表格类型数据首选。并且可以使用Excel打开。

名称,年份
A,1992
B,1998
C,2010

 

JSON格式:通常用来存储键值数据,一般情况下选择

[{"名称":"A","年份":"1992"},{"名称":"B","年份":"1998"},{"名称":"C","年份":"2010"}]

 

XML格式:存储非常复杂的数据格式,大多数情况下用不到。

<0><名称>A<!--名称--><年份>1992<!--年份--><!--0--><1><名称>B<!--名称--><年份>1998<!--年份--><!--1--><2><名称>C<!--名称--><年份>2010<!--年份--><!--2-->

 

将爬虫数据写入CSV文件

from requests_html import HTMLSession
import csv

session=HTMLSession()
file=open('movies.csv','w',newline='')
csvwriter=csv.writer(file)
csvwriter.writerow(['名称','年份'])

links=['https://movie.douban.com/subject/1292052/',
       'https://movie.douban.com/subject/26752088/',
       'https://movie.douban.com/subject/1962665/']

for link in links:
    r=session.get(link)
    title=r.html.find('#content > h1 > span:nth-child(1)',first=True)
    year=r.html.find('#content > h1 > span.year',first=True)
    csvwriter.writerow([title.text,year.text])

file.close()

 

四、例子

简单地爬取百度新闻,并写入csv文件

from requests_html import HTMLSession
import csv

session=HTMLSession()
file=open('news_baidu.csv','w',newline='')
csvwriter=csv.writer(file)
csvwriter.writerow(['序号','新闻标题'])
n=1
ans_new_titles=[]

r=session.get('https://news.baidu.com/')
#r.html.render()
title_1=r.html.find('#pane-news > div > ul > li.hdline0 > strong > a',first=True)
csvwriter.writerow([n,title_1.text])
n=n+1

titles_baidu=r.html.find('#pane-news > ul:nth-child(n) > li.bold-item > a')
ans_new_titles+=titles_baidu

for title in ans_new_titles:
    csvwriter.writerow([n,title.text])
    n+=1
file.close()

 

位置:爬虫\\create_file1

爬取学习强国,失败,代码如下:

from requests_html import HTMLSession
import csv

session=HTMLSession()
file=open('news_xxqg.csv','w',newline='')
csvwriter=csv.writer(file)
csvwriter.writerow(['序号','新闻标题'])
n=1
ans_new_titles=[]

r=session.get('https://www.xuexi.cn/')
r.html.render()

titles_xxqg=r.html.find('#Ckhjp4r149s000',first=True)
ans_new_titles+=titles_xxqg

for title in ans_new_titles:
    csvwriter.writerow([n,title.text])
    n+=1
file.close()

 

 

五、简单搜索引擎

对存入的文件进行读取 

import csv

page_url=[]
page_title=[]
file=open('全站爬虫爬取百度ai.csv','r')
infos=csv.reader(file)
for info in infos:
    page_title.append(info[0])
    page_url.append(info[1])

while True:
    keyword=input('请输入查询关键字,输入quit结束')
    if keyword=='quit':
        break
    for i in range(len(page_title)):
        if str(page_title[i]).find(keyword)>=0:
            print(page_url[i],page_title[i])
file.close()

 

posted @ 2019-02-11 15:44  余火灬  阅读(863)  评论(0编辑  收藏  举报