此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。
项目案例目标:练习爬虫技术,获取高评分电影。
这个是我的第一篇爬虫博客。该案例特简单,爬取 豆瓣电影top250
。(20190724
结合视频食用,味道更佳! 【Python爬虫】Python爬虫入门,看这个就够了!!!
先请个首页、第二页、尾页看看,记录 URL
。
https://movie.douban.com/top250?start=0&filter= #第1页
https://movie.douban.com/top250?start=25&filter= #第2页
...
...
https://movie.douban.com/top250?start=225&filter= #第10页
通过观察URL可以发现,URL的变化点就在 start=
这里,每一页递增25,清楚了URL的规律后,接下来就可以请求网页进行分析了。
# 请求url,因为一页有25个电影,共10页。这里用一个for函数去10个数字
for count in range(10):
url = f'https://movie.douban.com/top250?start={count*25}&filter='
response = requests.get(url).text
查看获取到response,也就是网页源代码,这里我们主要爬取画圈圈的四个点。用到的是正则表达式进行数据的提取。
现在回看,这个代码跟
dogshit
差不多,懒得改了。(20201003,
建议看后来写的东西吧!会较为清晰!!!
建议看后来写的东西吧!会较为清晰!!!
建议看后来写的东西吧!会较为清晰!!!
点击直达:
【Python爬虫】Python爬虫入门,看这个就够了!!!
点击直达:
【Python爬虫】Python爬虫入门,看这个就够了!!!
# 导入模块
import re
import requests
headers = {
'User-Agent':'Mozilla/5.0'
}
# 请求url,因为一页有25个电影,共10页。这里用一个for函数取10个数字
for i in range(10):
url = 'https://movie.douban.com/top250?start=%s&filter=' % (i * 25)
# 网页响应,requests.get表示请求获取网页,text一般用于返回的文本
response = requests.get(url,headers=headers).text
# 解析网页,在请求网页成功后,就需要解析网页了。
# 这里用到了正则表达式,有不清楚的欢迎在下方留言或指正我的错误。
pattern = re.compile('.*?(.*?).*?'
'(.*?).*?<.*?"v:average">(.*?) .*?(.*?)'
'人评价.*?(.*?).*?',re.S)
# 给解析后的网页文本定义一个变量
items = re.findall(pattern, response)
# 遍历items,打印对应的内容
for item in items:
print("ID:",item[0],
"title:", item[1],
"score:", item[2],
"count:", item[3],
"comment:", item[4])
# 导入模块
import re
import csv
import time
import json
import requests
from threading import Thread
class Douban_Spider(object):
def __init__(self):
self.headers = {
'User-Agent':'Mozilla/5.0'
}
# 请求网页
def get_page(self, url):
res = requests.get(url,headers=self.headers)
res.encoding = 'utf-8'
if res.status_code == 200:
return res.text
return None
# 利用正则解析网页
def parse_page(self, url):
html = self.get_page(url)
pattern = re.compile('.*?(.*?).*?'
'(.*?).*?<.*?"v:average">(.*?) .*?(.*?)'
'人评价.*?(.*?).*?', re.S)
items = re.findall(pattern, html)
return items
# 将收集的数据写入文档
def write_to_file(self, url):
items = self.parse_page(url)
for item in items:
with open('movietop250.csv', 'a+',newline='') as f:
writer = csv.writer(f)
writer.writerow(["ID:", item[0],
"title:", item[1],
"score:", item[2],
"count:", item[3],
"comment:", item[4]])
# 设置起始页
def main(self, start, end):
for i in range(start, end):
url = 'https://movie.douban.com/top250?start=' + str(i * 25)
time.sleep(1) # 睡眠一秒,防止被封ip
self.write_to_file(url)
# 执行程序
if __name__ == '__main__':
dp = Douban_Spider()
# dp.main()
t1 = Thread(target=dp.main, args=(0, 5))
t2 = Thread(target=dp.main, args=(5, 11))
t1.start()
t2.start() # 启动刚刚创建2个线程
t1.join()
t2.join() # 加入join后 ,子线程结束,主线程才结束,运行速度会变慢
好了,本次的分享到这里结束。
有任何疑问欢迎在下方留言哦。