爬取有规则的数据结构,主要运用的是requests库,想学scrapy来爬。
下一个目标是爬取教务系统的成绩。
学习的来源
一些项目的源代码
教务系统爬取成绩
scrapy官方文档
正则表达式
一些需要注意的小示例:
re模块的官方文档
贪婪模式下的匹配
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| if __name__ == '__main__': str = '<a> b <c>' pattern = re.compile('<.*>', re.S) items = re.findall(pattern, str) print(items) ``` ``` python if __name__ == '__main__': str = '<a> b <c>' pattern = re.compile('<.*?>', re.S) items = re.findall(pattern, str) print(items)
|
爬取最简单的网页信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| import requests import re from requests.exceptions import RequestException import json def get_page(url): response = requests.get(url) try: if response.status_code == 200: return response.text return None except RequestException: return None def parse_page(html): pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?<p class="name">.*?' 'data-val=.*?>(.*?)</a></p>.*?class="star">(.*?)</p>', re.S) items = re.findall(pattern, html) for item in items: yield { "rank": item[0], "name": item[1].strip(), "star": item[2].strip()[3:] } def main(offset): url = 'http://maoyan.com/board/4?offset='+str(offset) html = get_page(url) if html == None: print('haha\n') for item in parse_page(html): print(item) write_to_file(item) def write_to_file(content): with open('result.txt', 'a', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False)+'\n') f.close() if __name__ == "__main__": for i in range(10): main(i*10)
|
未解决的问题