爬虫入门 写了这篇博客记录自己学习的过程
大概思路是这样的 我们打开一个贴吧 比如 巴啦啦小魔仙吧 然后我们发现这个贴吧的网址为
http://tieba.baidu.com/f?kw=%E5%B7%B4%E5%95%A6%E5%95%A6%E5%B0%8F%E9%AD%94%E4%BB%99&ie=utf-8&pn=50
然后我们来分析这个url 直到第一个问号为止是百度贴吧都会有的部分 我们照抄就好了 而kw很明显是关键字 kw后面的=%一堆东西则是巴啦啦小魔仙的url转码部分 这个转码信息我们可以用特殊的网站来获取 网上有很多的 当然python里有urlencode函数可以直接获取 但是python3里这个函数要写成urllib.parse.urlencode这种方式 有点长 后面的&也是分隔符号 ie=utf-8是你用ie浏览器的时候才需要的 所以我们可以删掉这个部分 在后面的pn=50则是第几个页面的关键部分了 这也是静态页面好爬的原因 可以构造url嘛 不难发现 pn = (页面号码 - 1) * 50
我们大概需要这些模块 贴吧爬虫调度模块 处理不同的url需要一个模块 把拿到的页面信息写到本地需要一个模块
还加入了一点反反爬虫部分 就是自己写一个request 假装自己是浏览器
#为了爬某个贴吧中任意起始页面到中止页面的html文件
import os
import urllib.request
import sys
def LoadPage(name , page , url):
'''
作用:访问指定的url界面 然后返回html文件
'''
headers = {"User-Agent" : "Mozila 5.0.0.4"}
print("正在下载%s吧第%d页的页面信息"%(name , page))
request = urllib.request.Request(url , headers = headers)
html = urllib.request.urlopen(request)
return html
def WritePage(name , page ,html):
'''
为了把返回的html文件写入到本地
'''
print("正在保存%s吧第%d页的页面信息"%(name, page))
with open(name + "吧第" + str(page) + "页信息.html" ,"w") as file:
file.write(str(html))
def TieBaSpider(name , url , beginpage , endpage):
'''
作用:一个贴吧爬虫调度器 用来自动访问起始页面到中止页面之间的url地址的html信息而存在
'''
for page in range(beginpage , endpage + 1):
pn = (page - 1) * 50
SS = "&pn=" + str(pn)
fullurl = url + SS
print("-"*50)
html = LoadPage(name , page ,fullurl)
WritePage(name , page , html)
if __name__ == "__main__":
url = "https://tieba.baidu.com/f?"# 这个是贴吧的统一头开头地址
kw = input("请输入你想查询的贴吧名(不加吧):")
name = kw
beginpage = int(input("请输入你想爬取的初始页面号:"))
endpage = int(input("请输入你想爬取的中止页面号:"))
#这个步骤是为了转码 url转码格式py3用这个函数是真的麻烦
kw = {"kw" : kw}
kw = urllib.parse.urlencode(kw)
fullurl = url + kw
#调用这个爬虫调度器来自动爬取页面的html文件信息好了
TieBaSpider(name , fullurl , beginpage , endpage)