版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30500113/article/details/83580904
环境:python3.6
1:抓取百度贴吧—linux吧内容 基础版 抓取一页指定内容并写入文件
萌新刚学习Python爬虫,做个练习
贴吧链接: http://tieba.baidu.com/f?kw=linux&ie=utf-8&pn=0
解析源码使用的是BeautifulSoup
关于BeautifulSoup: 可以直接查看官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
文件存储使用json的方式
当然你可以保存成txt文件
废话不多说 直接上代码
'''
抓取百度贴吧---linux吧内容
基础版 抓取一页指定内容并写入文件
爬虫线路: requests - pyquery
Python版本: 3.6
'''
import requests
import json
from bs4 import BeautifulSoup
# 用于发送请求,获得网页源代码以供解析
def start_requests(url):
r = requests.get(url)
return r.content
# 解析内容
def parse(text):
soup = BeautifulSoup(text, 'lxml')
infos = soup.find_all('li', attrs={'class': 'j_thread_list'})
# 创建一个列表存储所有结果
result_list = []
for info in infos[1:]:
# 创建一个字典将所有信息存入字典中
mydict = {}
mydict['title'] = info.find('a', class_='j_th_tit').text.strip() # 帖子标题
mydict['link'] = "http://tieba.baidu.com/" + info.find('a', class_='j_th_tit')['href'] # 帖子链接
mydict['author'] = info.find('a', class_='frs-author-name').text.strip() # 帖子作者
mydict['time'] = info.find('span', class_='pull-right').text # 发表时间
result_list.append(mydict)
return result_list
# 将数据写入json文件
def write_json(result):
s = json.dumps(result, indent=4, ensure_ascii=False)
with open('tieba.json', 'w', encoding='utf-8') as f:
f.write(s)
def main():
# 贴吧链接
url = 'http://tieba.baidu.com/f?kw=linux&ie=utf-8&pn=0'
text = start_requests(url)
result = parse(text)
write_json(result)
# 一般做法
if __name__ == '__main__':
main()
文件内容:
2:抓取百度贴吧—linux吧内容 升级版 抓取指定页内容并写入文件 多页抓取之构造url
'''
抓取百度贴吧---linux吧内容
升级版 抓取指定页内容并写入文件
多页抓取之构造url
爬虫线路: requests - pyquery
Python版本: 3.6
'''
import requests
import json
from bs4 import BeautifulSoup
# 用于发送请求,获得网页源代码以供解析
def start_requests(url):
r = requests.get(url)
print(111)
return r.content
# 解析内容
def parse(text):
soup = BeautifulSoup(text, 'lxml')
infos = soup.find_all('li', attrs={'class': 'j_thread_list'})
for info in infos[1:]:
mydict = {}
mydict['title'] = info.find('a', class_='j_th_tit').text.strip()
mydict['link'] = "http://tieba.baidu.com/" + info.find('a', class_='j_th_tit')['href']
mydict['author'] = info.find('a', class_='frs-author-name').text.strip()
mydict['time'] = info.find('span', class_='pull-right').text
result_list.append(mydict)
# 将数据写入json文件
def write_json(result):
s = json.dumps(result, indent=4, ensure_ascii=False)
with open('all_tieBa.json', 'w', encoding='utf-8') as f:
f.write(s)
def main():
for i in range(10):
url = 'http://tieba.baidu.com/f?kw=linux&ie=utf-8&pn={}'.format(i * 50)
text = start_requests(url)
parse(text)
write_json(result_list)
print('写入完成')
# 一般做法
if __name__ == '__main__':
result_list = []
main()
3:抓取百度贴吧—linux吧内容 升级版 抓取所有页内容并写入文件 多页抓取之翻页
这里要抓取的内容已经很多了,速度会很慢,萌新还不会通过其他技术来加速下载速度
'''
抓取百度贴吧---linux吧内容
升级版 抓取所有页内容并写入文件
多页抓取之翻页
爬虫线路: requests - pyquery
Python版本: 3.6
'''
import requests
import json
from bs4 import BeautifulSoup
# 用于发送请求,获得网页源代码以供解析
def start_requests(url):
r = requests.get(url)
return r.content
# 解析内容
def parse(text):
"""
翻页原理是爬取一页的信息的同时,把下一页的url也爬取到,再对抓取到的这个url进行爬取。这种方法适用于有“下一页”
标签的网站,而且一般是网页url无法构造的时候才用这种方法。
用这种方法要注意对有无下一页进行判断
"""
soup = BeautifulSoup(text, 'lxml')
infos = soup.find_all('li', attrs={'class': 'j_thread_list'})
for info in infos[1:]:
mydict = {}
mydict['title'] = info.find('a', class_='j_th_tit').text.strip()
mydict['link'] = "http://tieba.baidu.com/" + info.find('a', class_='j_th_tit')['href']
mydict['author'] = info.find('a', class_='frs-author-name').text.strip()
mydict['time'] = info.find('span', class_='pull-right').text
result_list.append(mydict)
# 此处获取下一页的链接对象
next_page = soup.find('a', class_='next')
if next_page:
next_url = 'http:'+next_page['href']
print(next_url)
text = start_requests(next_url)
parse(text)
# 将数据写入json文件
def write_json(result):
s = json.dumps(result, indent=4, ensure_ascii=False)
with open('tieba3.json', 'w', encoding='utf-8') as f:
f.write(s)
def main():
text = start_requests(base_url)
parse(text)
write_json(result_list)
print('写入完成')
# 一般做法
if __name__ == '__main__':
base_url = 'http://tieba.baidu.com/f?ie=utf-8&kw=linux&fr=search&red_tag=s0376598528'
result_list = []
main()
运行代码:
总结到此为止 -->over