一个人在深圳蛮无聊的所以爬一下豆瓣上深圳有的活动,方便参加。
获取 名字、标签、时间、位置、价格 对于自己中意的直接参加或者了解详细后再说,爬取这个主要是有生成一个表格方便直接处理。 下面是代码:
import re
import requests
import bs4
import re
import xlwt as xlwt
title = re.compile(r'<a .*title=(.*)">')
tag = re.compile(r'<a.*p=future">(.*)</a>')
time = re.compile(r'20..年.*~.*')
local = re.compile(r'<li title="(.*)"')
money = re.compile(r'<strong>(.*)<')
urls = []
head = { # 模拟浏览器头部信息,向豆瓣发消息
"User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, like; Gecko) Chrome / 86.0; .4240; .198; Safari / 537.36"}
book = xlwt.Workbook(encoding="utf-8", style_compression=0) # 创建对象
sheet = book.add_sheet('深圳活动', cell_overwrite_ok=True) # 创建工作表
col = ("名字", '标签', '时间', '位置', '钱')
for i in range(5):
sheet.write(0,i,col[i])
book.save('深圳活动.xls')
num = 0
for i in range(0, 500, 10):
url = 'https://www.douban.com/location/shenzhen/events/future-all?start=' + str(i)
print(url)
print(num)
page_html = requests.get(url,headers=head).text
# print(page_html)
soup = bs4.BeautifulSoup(page_html,'html.parser')
li_num =0
for item in soup.find_all('li', class_ ='list-entry'):
li = []
if li_num !=10:
li_num +=1
num +=1
item = str(item)
Title = re.findall(title,item)[0]
li.append(Title)
Tag = re.findall(tag,item)
li.append(Tag)
Time = re.findall(time,item)
li.append(Time)
Local = re.findall(local,item)
li.append(Local)
Money = re.findall(money,item)
li.append(Money)
for i in range(5):
sheet.write(num, i,li[i])
book.save('深圳活动.xls')
# 这里写的很蠢是因为爬取title的时候超出长度,一直不理解,想着每次也是爬10个就这么搞了。有更好的方法可以评论
elif num %10 == 0:
num +=1
break
获取后的表格,总感觉加个链接会更好- -,两行代码的事有兴趣的可以自己搞。