import csv import requests from lxml import etree if __name__ == "__main__": url = 'https://heze.lianjia.com/zufang/pg%d' header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57' } #爬取源码数据 headers = ["区域", "小区名称", "户型", "面积(㎡)", "价格(元/月)"] path = "链家菏泽租房数据.csv" with open(path, 'wb') as f: csv_write = csv.writer(f) csv_head = ["区域", "小区名称", "户型", "面积(㎡)", "价格(元/月)"] csv_write.writerow(csv_head) for num in range(85,101): new_url = format(url%num) page_num1 = requests.get(url=new_url, headers=header) page_num1.encoding = ('utf-8') page_num = page_num1.text tree = etree.HTML(page_num) # 存储的就是标签对象 div_list = tree.xpath('//*[@id="content"]/div[1]/div[1]/div') with open(path, 'a+') as f: for div in div_list: quyu = div.xpath('./div/p[2]/a[1]//text()')[0] name = div.xpath('./div/p[2]/a[3]//text()')[0] area = div.xpath('./div/p[2]/text()')[4].split()[0] type = div.xpath('./div/p[2]/text()')[6].split()[0] place = div.xpath('./div//span/em/text()')[0] csv_write = csv.writer(f) data_row = [quyu,name,type,area,place] csv_write.writerow(data_row) print("完成")每段代码的解释
时间: 2024-04-01 14:36:02 浏览: 52
from lxml import etree
代码解释如下:
1. `import csv` 和 `import requests` 语句导入了csv库和requests库,用于读写CSV文件和发送HTTP请求。
2. `from lxml import etree` 语句导入了lxml库中的etree模块,用于解析HTML和XML文档。
3. `if __name__ == "__main__":` 语句定义了主程序入口。
4. `url = 'https://heze.lianjia.com/zufang/pg%d'` 定义了要爬取的网页链接,其中%d是一个占位符,将在后面的for循环中被替换成实际的页码。
5. `header = {...}` 定义了HTTP请求头信息,包括User-Agent等。
6. `headers = ["区域", "小区名称", "户型", "面积(㎡)", "价格(元/月)"]` 定义了要爬取的数据字段。
7. `path = "链家菏泽租房数据.csv"` 定义了CSV文件的路径。
8. `with open(path, 'wb') as f:` 语句打开CSV文件,使用csv.writer()函数创建一个csv.writer对象,用于写入CSV文件。
9. `csv_head = ["区域", "小区名称", "户型", "面积(㎡)", "价格(元/月)"]` 定义了CSV文件的表头,即数据字段名称。
10. `csv_write.writerow(csv_head)` 语句将表头写入CSV文件。
11. `for num in range(85,101):` 语句用于循环爬取多个网页,其中range(85,101)表示需要爬取85-100页的租房信息。
12. `new_url = format(url%num)` 语句使用字符串的format()方法将%d占位符替换成实际的页码num。
13. `page_num1 = requests.get(url=new_url, headers=header)` 语句使用requests库发送HTTP请求,获取网页源码数据。
14. `page_num1.encoding = ('utf-8')` 语句设置HTTP响应的编码格式为utf-8。
15. `page_num = page_num1.text` 语句获取HTTP响应的文本数据。
16. `tree = etree.HTML(page_num)` 语句将HTML文档解析成lxml树对象。
17. `div_list = tree.xpath('//*[@id="content"]/div[1]/div[1]/div')` 语句使用xpath语法获取所有租房信息的父级标签对象。
18. `with open(path, 'a+') as f:` 语句打开CSV文件,使用csv.writer()函数创建一个csv.writer对象,用于写入CSV文件。
19. `for div in div_list:` 语句用于循环处理每个租房信息的标签对象。
20. `quyu = div.xpath('./div/p[2]/a[1]//text()')[0]` 语句使用xpath语法获取租房信息的区域字段。
21. `name = div.xpath('./div/p[2]/a[3]//text()')[0]` 语句使用xpath语法获取租房信息的小区名称字段。
22. `area = div.xpath('./div/p[2]/text()')[4].split()[0]` 语句使用xpath语法获取租房信息的面积字段。
23. `type = div.xpath('./div/p[2]/text()')[6].split()[0]` 语句使用xpath语法获取租房信息的户型字段。
24. `place = div.xpath('./div//span/em/text()')[0]` 语句使用xpath语法获取租房信息的价格字段。
25. `csv_write.writerow(data_row)` 语句将获取到的租房信息写入CSV文件。
26. `print("完成")` 语句输出提示信息,表示当前租房信息爬取和写入工作已完成。
阅读全文