Python小白写的三个入门级的爬虫(附注释)

写在前面的话:作者目前正在学习Python,还是一名小白,所以注释可以会有些不准确的地方,望谅解。

这三个小爬虫不是很难,而且用处可能也不大,主要还是锻炼新手对函数的运用与理解

大牛和意义党可以先绕过了

附:我用的是Pyton2.713,用3.0的朋友运行可能会有些代码出错

第一个,网页源代码爬虫;

#-- coding: utf-8 --

#一个巨详细又简单的小爬虫

#---------------------------------

import string

from urllib2 import urlopen #通过from import导入urllib2库中的urlopen模块,用于抓取url的内容

url = raw_input('>') #使用raw_input函数让用户输入想要爬取的网页,并且赋值给变量

x = urlopen('http://'+url) #调用urlopen获取源码并赋值给变量 前边加上http://是怕用户忘记输入http协议

print x.read() #最后使用read函数查看并使用print打印出来

用Python自带的IDLE打开,输入www.baidu.com ,效果如图;

python爬虫附源代码 python爬虫源码附注解_html

第二个,爬取并下载百度贴吧的内容;

#-- coding: utf-8 --

#爬取并下载百度贴吧的html文件

#作者:秦王IPC

#------------------------------------------------

import string #调用模块

from urllib2 import urlopen #调用urllib2库中的模块

#---------------------------------

#定义函数

def paqutieba(url,x,y):

for j in range(x, y+1): #循环从开始页面到终点页面

Name = string.zfill(j,5) + '.html' #string.zfill(1,5) 文件名效果00001.

print '正在下载第' + str(j) + '个网页内容,并将其存储为' + Name + '......' #下载的时候打印

l = open(Name,'w+') #将写入操作赋值给变量l

k = urlopen(url + str(j)).read() #调用urlopen模块抓取网页内容并查看并赋值给变量k

l.write(k) #将k内容写入

l.close() #关闭

#---------------------------------与用户交互---------------

url = str(raw_input(u'请输入贴吧的地址,去掉?pn=后面的数字:\n格式:https://tieba.baidu.com/p/xxxxxxxxx?pn= \n>>>'))

x = int(raw_input(u'请输入开始的页数:\n'))

y = int(raw_input(u'请输入终点的页数:\n'))

paqutieba(url,x,y) #调用函数

用Python自带的IDLE打开,随意输入一个贴吧地址 (有些URL没有 ?pn= 得自己加上去),效果如图;

python爬虫附源代码 python爬虫源码附注解_python爬虫附源代码_02

第三个,爬取内涵段子并写入文本(这个对新手来讲可能有点难理解和麻烦)

需要用到的工具:谷歌浏览器,火狐浏览器,和一颗坚持下去的心。

准备工作

1.用谷歌打开内涵段子官网,然后按F12进行抓包,如图;

python爬虫附源代码 python爬虫源码附注解_python爬虫源码附注解_03

初始框在右边,可以在Dock side那里调到下面,选择Network,然后点All,如果左上角不是红点,就点一下(是红色就不用点)表示浏览器正对此页面进行抓包。

再然后滑到最下面点击加载更多;

此时查看抓到的内容,找到图中的文件,并且复制Request URL 的链接地址,在火狐浏览器中打开,(之所以用火狐是因为火狐自带转码,不然用谷歌打开可能会是乱码);

python爬虫附源代码 python爬虫源码附注解_python爬虫附源代码_04

在火狐浏览器中打开如图;

python爬虫附源代码 python爬虫源码附注解_html_05

然后点开可以发现,段子内容在 data>data>0>group>text路径下;

python爬虫附源代码 python爬虫源码附注解_python爬虫源码附注解_06

还可以发现,不止有0,还有1,2,3,4,5....19,可以猜到这应该是页数之类的。所以后面可以利用代码来循环爬取更多的内容;

python爬虫附源代码 python爬虫源码附注解_json_07

还需要突破反爬措施,其实很简单,只需要将Request Headers下的内容复制放进代码里就行了(不过要记得加''和:分开来,代码部分有);

python爬虫附源代码 python爬虫源码附注解_json_08

代码部分

'''

Title = 爬取内涵段子写入进文本

coder = 秦王IPC

date = 2018-01-30

因为使用while循环,所以需要手动停止,不然会一直写入下去。

'''

import requests #网络请求模块

import time #时间模块,下面要设置访问间隔时间。如果不设置,服务器可能会认为你是恶意***,就会进行防护措施,如封IP什么的。

import sys

reload(sys)

sys.setdefaultencoding('utf-8')#这三行是转码

header = {'Host':'neihanshequ.com',

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0',

'Accept': 'application/json, text/javascript, */*; q=0.01',

'Accept-Language': 'zh-CN,en-US;q=0.7,en;q=0.3',

'Accept-Encoding': 'gzip, deflate',

'Referer': 'http://neihanshequ.com/',

'X-CSRFToken': 'e9b62faa6a962cdf92f1531b498fc771',

'X-Requested-With': 'XMLHttpRequest',

'Cookie': 'csrftoken=e9b62faa6a962cdf92f1531b498fc771; tt_webid=6486401443292186126; uuid="w:c07f437659474cc1a7cfd052d9985b37"; Hm_lvt_3280fbe8d51d664ffc36594659b91638=1511848146,1512200937,1512371475,1514373568',

'Connection': 'keep-alive',

'Pragma': 'no-cache',

'Cache-Control': 'no-cache'}

#添加网页的Request Headers信息,伪装成通过浏览器访问,目的是为了突破反爬措施。

timestamp = 1517361103 #设置并赋值起始时间戳 --下面的while循环是利用时间戳来判断

while type(timestamp) == int or type(timestamp) == float: #保证时间戳不管是哪种类型的数值都能运行

url = 'http://neihanshequ.com/joke/?is_json=1&app_name=neihanshequ_web&max_time='+str(timestamp) #用F12抓包然后点加载更多获取原始链接

html = requests.get(url,headers=header)#使用get请求url内容,并赋值为html

time.sleep(3) #设置间隔时间

for u in range(len(html.json()['data']['data'])):

#print(len(html.json()['data']['data']))判断一页有多少段子,放进for语句中就是有多少循环多少的意思

with open(r'c:\duanzi.txt','a' ) as ipc: #使用with。设置写入路径

nr=html.json()['data']['data'][u]['group']['text'] #html.json是文件类型,方括号里面的是内容所在路径

ipc.write(nr+'\n') #进行写入操作

timestamp = html.json()['data']['max_time'] #每当循环一次结束后,返回新的时间戳进行下一次循环

#--------------------------可以加可不加---------------------

#print(html.status_code)#返回状态码

#print(html.json()['data']['max_time'])#返回时间戳

运行效果;

python爬虫附源代码 python爬虫源码附注解_python爬虫附源代码_09

小白的第一篇博客,有错误或是不准确的地方可以在评论区里指出(注意用词文明),谢谢!