您的位置:首页 > 运维架构

猫眼爬虫Top100

2018-03-26 21:37 351 查看
import requestsfrom requests.exceptions import RequestExceptionfrom multiprocessing import poolimport multiprocessingimport reimport 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文件中 采用多线程搜索
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: