爬取有规则的数据结构,主要运用的是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)
 | 
未解决的问题