大一小白爬虫初试(初学者必看)

来源:互联网 发布:比原子小的物质知乎 编辑:程序博客网 时间:2024/04/30 06:21

目录:

  • 爬虫基础知识学习网址(简单易懂)
  • 案例分析
  • 我爬取新闻网站所遇到的问题及其解决方法
  • 还存留的疑惑

关于爬虫的基础知识的网站

  • 崔庆才爬虫博客(先看) http://cuiqingcai.com/1052.html
  • 廖雪峰python学习网站 http://www.liaoxuefeng.c/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000
  • 爬虫实例 http://cuiqingcai.com/4352.html
  • 知乎小白爬虫具体案例+分析 https://www.zhihu.com/collection/159805421
  • 知乎爬虫之知识集锦 (遇到问题时再看) https://zhuanlan.zhihu.com/p/21479334

爬取一个新闻网站

第一步:明确爬虫思路

1)在看完以上教程后,我们可以知道,我们要获取的网页的信息皆来自html源代码,而获取源代码需要我们获得这个网页的url(即链接),所以当我们爬取整个网站时,需要先获得网站的url

2)故而我们需要先观察要爬取的网站的架构
例如我的:
先得到: 大目录下每一项的url
再得到: 该目录项下每一页的url
最后获得: 每一项新闻的url 
(此处可用循环函数) 

3)通过每一项的url,获得该url的html的信息: 
  标题,发布时间,图片,正文等
  (此处可用正则匹配和beautifulsoup)

这一来O(∩_∩)O是不是思路清晰了很多呢?
从我刚刚讲到的就可以知道爬虫最关键的两步就是获得访问权限匹配 了,  下面具体问题具体分析

第二步:获得访问权限

1)网页请求头的获取方法:
按"f12"--然后点击"网络监视器"--在列表中随机点击一个--点击后会出现消息头--在消息头处找到请求头--找到'User-Agent'--其对应的值(这就是请求头啦)
这个是我在刚刚说的那个网站上获得的:

headers = {    'User_Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0'}url = "http://zh.vietnamplus.vn/"m_response = requests.get(url=url, headers=headers)m_html = m_response.text

2)其他详细方法请戳-->http://www.cnblogs.com/junrong624/p/5533655.html

第三步:查看页面元素以及正则匹配

把鼠标移到目录位置按右键-"查看元素",可以定位该目录,并看到其在html上对应的代码:

"><span class="title"><a href="/politics.vnp">时政</a></span></li><li class="parent "><span class="title"><a href="/world.vnp">国际</a></span></li><li class="parent "><span class="title"><a href="/business.vnp">经济</a></span></li><li class="parent "><span class="title"><a href="/social.vnp">社会</a></span></li><li class="parent "><span class="title"><a href="/culture.vnp">文化</a></span></li><li class="parent "><span class="title"><a href="/sports.vnp">体育</a></span></li><li class="parent "><span class="title"><a href="/technology.vnp">科技</a></span></li><li class="parent "><span class="title"><a href="/environment.vnp">环保</a></span></li><li class="parent "><span class="title"><a href="/Travel.vnp">旅游</a></span></li>

当我从网站上进入其中一项,如:"时政"时,我发现出现的新网页的url正好就是上面的 'politics.vnp'+在首页网址(http://zh.vietnamplus.vn/)后面 http://zh.vietnamplus.vn/politics.vnp

所以我们只要把相应的网址的url字符串匹配出来后再联结在一起再访问就可以访问子网页啦!~

这个时候我们就要用到正则匹配了
(请先装好re包)
到底怎么用呢?请戳下面:

  • 正则匹配的简单学习的网址:
    http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html?nsukey=87n%2Feuq1bh7UOjRfssJX4yWyLNqQSEzMW%2Fw6i4y5GxXWo8dRgZ1ZYIkAHI44dWrMmTsOPomm%2B6aU2eyVkFkfvTod4B5TLtYC2Z6uk2ez0eBTqzW6HOn7%2BGCeIMy9ViXz9IUMrw%2BipjAA5YYItCXPLA%3D%3D
  • 正则匹配的详细学习的网址(这个比较容易理解些)
    https://deerchao.net/tutorials/regex/regex.htm?nsukey=FH6k8nAWLGh8BnpLuW8%2FP9IKHkoYL93XC4NJ3clbq1MJcfL9HbBOLFd3pLK1g89JflKztPFDK3DRW7vfLGqMWLUKazcMVoUNEgBItrR96dGc8PYahHrqTGdembVCTatGYsQxz5gptqT57qZTFLoERnsH8fCAlLV8%2Fxb4lh0wbKgBtFLEtfDxpO7QpF%2F3RH0T

python代码如下:

classifications = re.findall(r’.+?\s’, m_html)#这里就是正则匹配啦
# 利用集合去重
classifications = list(set(classifications))
print classifications
#获取每个分类的url
num = 0
for classification in classifications:
c_url = ‘http://zh.vietnamplus.vn/’ + classification
print c_url
classification

比较高难度点的就用beautifulsoup
到底怎么用呢?请戳下面:

  • Beautifulsoup的学习的网址:
    http://blog.sina.com.cn/s/blog_64d0b03c0101dxd3.html
  • Beautifulsoup的详细学习的网址(这个比较容易理解些)
    http://cndenis.iteye.com/blog/1746706

    以此类推,是不是也可以匹配其他信息了

第四步:将爬取的内容保存到文件里
- 参考方法:
http://www.cnblogs.com/ymjyqsx/p/6554817.html

**爬虫过程中遇到的问题:
1>url字符串无法联结
2>url无法访问
方法
方法
3>字符串就是匹配不到,明明没错
4>编码解码等问题
方法

方法

这些内容待我搞明白会继续补充

原创粉丝点击