python-猫眼爬虫Top100

import requests
from requests.exceptions import RequestException
from multiprocessing import pool
import multiprocessing
import re
import json

def get_page(url):
try :
User_Agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
headers = { "User-Agent" : User_Agent ,
"Accept" : 'image/webp,image/*,*/*;q=0.8'
'Referer' : 'http://maoyan.com/board/4' ,
}
response = requests.get(url, headers =headers)
if response.status_code == 200 :
# print(response.text)
return response.text
return None
except RequestException:
return None


def parse_one_page(html):
pattern=re.compile( '<dd>.*?board-index.*?>(\d+)</i>.*? data-src="(.*?)".*?</a>.*?<a href.*?>(.*?)</a></p>.*?<p class="star">(.*?)</p>'
+ '.*?<p class="releasetime">(.*?)</p>.*?<i class="integer">(.*?)</i><i class="fraction">(.*?)</i>' ,re.S)
items = re.findall(pattern, html)
for item in items:
yield {
'index' :item[ 0 ],
'img' :item[ 1 ],
'title' :item[ 2 ],
'actor' :item[ 3 ].strip()[ 3 :],
'time' :item[ 4 ].strip()[ 5 :],
'grade' :item[ 5 ]+item[ 6 ]
}
return

def write_to_file(content):
with open ( 'resule.txt' , 'a' , encoding = 'utf-8' ) as f:
f.write(json.dumps(content, ensure_ascii = False )+ ' \n ' )
f.close()

def main(offset):
url = 'http://maoyan.com/board/4?offset=' + str (offset)
html = get_page(url)
for item in parse_one_page(html):
write_to_file(item)
print (item)

if __name__ == "__main__" :
pools=multiprocessing.pool.Pool()
pools.map(main,[i* 10 for i in range ( 10 )])


# for offset in range(10):



今天学习了从猫眼网址爬去排名前一百的电影,代码很简单,但是在看完视频之后,自己写的过程中还是遇到挺多的问题
1.跟视频一样直接用requests.get()直接访问网页,然后被检测出来了。后来加了User-Agent就可以了。但是发现网页的内容却和电脑浏览器的不一样。一直在查找错误。因为在粘贴User_Agent的时候有稍微瞄了一下,看到了Android的字眼,然后在前几天在查过User-Agent是什么东西。是告诉服务端你的浏览器是什么型号版本还有你的操作系统信息。我就觉得是这里出现的问题,后来把User_Agent改了,就可以访问到页面的HTML代码了。User_Agent是告诉服务器你用的是什么操作系统和什么浏览器,服务器会根据这个信息返回相应的网页。比如你是Android系统的他会返回适应手机屏幕的网页,微软就适合电脑的网页
2.在写正则表达式的时候,觉得自己写的是没有问题的,还是配的时候没有结果。后来粘贴了视频上面的代码,结果可以了。但是我看了代码,觉得他的代码才是有问题的。但是他的代码却可以匹配出来,那问题肯定出现在我这里。我把访问的页面HTML打印出来,在浏览器的控制台进行对比,发现浏览器控制台的标签跟打印出来是不一样的,我配正则表达式的时候是看浏览器的,结果匹配错了,后来按照打印出来的匹配就成功了(按F12看的HTML代码有时候会跟你右键查看网页源代码不一样
3.然后照着视频进行多线程的爬虫,在调用Pool()函数的时候出现了问题。后来再百度上看到Pool是一个类,最终通过multiprocessing.pool.Pool()完成的。
4.之前在import 包的时候,总是灰色的,不知道为什么吗,今天才知道因为你引用了包,但是还没有调用里面的东西所有才是灰色的,有用到里面的东西就不会呈现灰色代码


整个项目的流程思路:
先直接访问电影前一百的网页,访问的时候需要加上Header才能够访问,判断是否访问网页成功,加处理异常。
然后查看元素进行定位,用正则表达式匹配出要检索的信息。打印到TXT文件中
采用多线程搜索

猜你喜欢

转载自blog.csdn.net/Doctor_LY/article/details/79704696