博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的爬虫
阅读量:5287 次
发布时间:2019-06-14

本文共 4263 字,大约阅读时间需要 14 分钟。

一、使用python下载网页代码

from requests_html import HTMLSessionsession = 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 HTMLSessionsession=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  HTMLSessionlinks=['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 csvfile=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,1992B,1998C,2010

 

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

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

 

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

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

 

将爬虫数据写入CSV文件

from requests_html import HTMLSessionimport csvsession=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 HTMLSessionimport csvsession=HTMLSession()file=open('news_baidu.csv','w',newline='')csvwriter=csv.writer(file)csvwriter.writerow(['序号','新闻标题'])n=1ans_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+1titles_baidu=r.html.find('#pane-news > ul:nth-child(n) > li.bold-item > a')ans_new_titles+=titles_baidufor title in ans_new_titles:    csvwriter.writerow([n,title.text])    n+=1file.close()

 

位置:爬虫\\create_file1

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

from requests_html import HTMLSessionimport csvsession=HTMLSession()file=open('news_xxqg.csv','w',newline='')csvwriter=csv.writer(file)csvwriter.writerow(['序号','新闻标题'])n=1ans_new_titles=[]r=session.get('https://www.xuexi.cn/')r.html.render()titles_xxqg=r.html.find('#Ckhjp4r149s000',first=True)ans_new_titles+=titles_xxqgfor title in ans_new_titles:    csvwriter.writerow([n,title.text])    n+=1file.close()

 

 

五、简单搜索引擎

对存入的文件进行读取 

import csvpage_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()

 

转载于:https://www.cnblogs.com/start20180703/p/10362070.html

你可能感兴趣的文章
[LeetCode] First Bad Version
查看>>
Java面向对象编程之异常处理机制
查看>>
虚拟存储管理
查看>>
Loj10222 佳佳的Fibonacci(矩阵乘法)
查看>>
springboot集成quartz实现任务调度
查看>>
剑指offer——重建二叉树
查看>>
二叉树——在二叉树中找到一个节点的前驱节点
查看>>
8.Java语言基础:函数
查看>>
从前端接收时间类型,要在实体类中加上@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")注解...
查看>>
移动cell的位置
查看>>
iTOP-iMX6UL全能板-linux-usb-wifi的使用
查看>>
Django学习---笔记一
查看>>
树莓派开发板入门学习笔记2:[转]树莓派系统在VM中能做什么
查看>>
从编译器源代码中提取ARMv8的指令编码
查看>>
2017前端面试题之Js篇(1)
查看>>
TRichTextBox – A universal RichTextBox which can display animated images and more
查看>>
Date、String、Calendar类型之间的转化
查看>>
jsoncpp操作 json
查看>>
spark中saveAsTextFile如何最终生成一个文件
查看>>
数据挖掘博客收集
查看>>