京东人工智能图书爬虫:获取书名、价格、评论、出版社和出版年份
import\ time\nimport\ random\nimport\ re\nfrom\ selenium\ import\ webdriver\nfrom\ selenium.webdriver.common.keys\ import\ Keys\n\n#\ 创建浏览器对象\ndriver\ =\ webdriver.Chrome()\n\n#\ 打开b站首页\ndriver.get("https://miaosha.jd.com/")\n\n#\ 输入搜索关键词\nsearch_input\ =\ driver.find_element_by_xpath("//[@id='key']")\nsearch_input.send_keys("人工智能图书")\ntime.sleep(0.1)\n\n#\ 按回车键进行搜索\nsearch_input.send_keys(Keys.ENTER)\ntime.sleep(3)\n\n#\ 获取当前窗口句柄\ncurrent_window\ =\ driver.current_window_handle\n#\ 切换到新打开的窗口\nfor\ window_handle\ in\ driver.window_handles:\n if\ window_handle\ !=\ current_window:\n driver.switch_to.window(window_handle)\n break\n\n#\ 获取搜索结果页面的所有书名、价格、评论信息\nbooks\ =\ driver.find_elements_by_xpath("//[@id='J_goodsList']/ul/li")\n\n#\ 遍历每本书的信息\nfor\ book\ in\ books:\n try:\n #\ 获取书名、价格、评论信息\n book_name\ =\ book.find_element_by_xpath(".//div/div[3]")\n price\ =\ book.find_element_by_xpath(".//div/div[2]")\n\n #\ 判断评论信息是否包含"评价"两个字\n comment\ =\ book.find_element_by_xpath(".//div/div[4]")\n if\ "评价"\ not\ in\ comment.text:\n comment\ =\ book.find_element_by_xpath(".//div/div[5]")\n\n print("书名:\ "\ +\ book_name.text) #\ 打印书名\n\n #\ 获取价格信息\n price_text\ =\ price.text\n price_match\ =\ re.search(r"¥(\d+.\d+)",\ price_text)\n if\ price_match:\n price_value\ =\ price_match.group(1)\n print("价格:\ "\ +\ price_value) #\ 打印价格\n else:\n print("未找到价格信息")\n\n #\ 使用正则表达式提取评论数\n comment_match\ =\ re.search(r"(\d+)",\ comment.text)\n if\ comment_match:\n comment_text\ =\ comment_match.group(1)\n print("评论数:\ "\ +\ comment_text) #\ 打印评论数\n else:\n print("未找到评论数")\n\n #\ 点击书名打开详情页面\n book_name.click()\n time.sleep(10)\n\n #\ 获取当前窗口句柄\n current_window\ =\ driver.current_window_handle\n #\ 切换到详情页面的窗口\n window_handle\ =\ driver.window_handles[1]\n driver.switch_to.window(window_handle)\n\n #\ 获取当前页面的URL\n current_url\ =\ driver.current_url\n\n #\ 查找出版社信息\n publisher\ =\ None\n possible_xpaths\ =\ [\n "//[@id='detail']/div[2]/div[1]/div[1]/ul/li/a",\n "//[@id='detail']/div[2]/div[1]/div[1]/ul/li[2]/a",\n "//[@id='detail']/div[2]/div[1]/div[1]/ul/li[1]/a[1]"\n ]\n for\ xpath\ in\ possible_xpaths:\n publishers\ =\ driver.find_elements_by_xpath(xpath)\n if\ publishers:\n publisher\ =\ publishers[0]\n if\ "出版社"\ in\ publisher.text:\n break\n\n if\ publisher:\n publisher_text\ =\ publisher.text\n if\ "出版社"\ in\ publisher_text:\n publisher_value\ =\ publisher_text.replace("出版社:",\ "")\n print("出版社:\ "\ +\ publisher_value)\n else:\n print("未找到出版社信息")\n else:\n print("未找到出版社信息")\n\n #\ 查找出版年份信息\n publish_year\ =\ None\n possible_xpaths\ =\ [\n "//[@id='detail']/div[2]/div[1]/div[1]/ul/li[8]",\n "//[@id='detail']/div[2]/div[1]/div[1]/ul/li[6]",\n "//[@id='detail']/div[2]/div[1]/div[1]/ul/li[5]"\n ]\n for\ xpath\ in\ possible_xpaths:\n publish_years\ =\ driver.find_elements_by_xpath(xpath)\n if\ publish_years:\n publish_year\ =\ publish_years[0]\n if\ "出版时间"\ in\ publish_year.text:\n break\n\n if\ publish_year:\n publish_year_text\ =\ re.search(r":(.+)",\ publish_year.text)\n if\ publish_year_text:\n publish_year_value\ =\ publish_year_text.group(1)\n print("出版年份:\ "\ +\ publish_year_value)\n else:\n print("未找到出版年份信息")\n else:\n print("未找到出版年份信息")\n\n #\ Click\ on\ the\ "商品评价"\ button\n shop_button\ =\ driver.find_elements_by_xpath("//[@id='detail']/div[1]/ul/li[5]")[0]\n shop_button.click()\n time.sleep(5)\n\n #\ 爬取并输出评价信息(好评中评差评数目)\n good_comments\ =\ driver.find_elements_by_xpath("//[@id='comment']/div[2]/div[2]/div[1]/ul/li[5]/a/em")\n for\ comment\ in\ good_comments:\n print("好评:" + comment.text.strip("()"))\n medium_comments\ =\ driver.find_elements_by_xpath("//[@id='comment']/div[2]/div[2]/div[1]/ul/li[6]/a/em")\n for\ comment\ in\ medium_comments:\n print("中评:" + comment.text.strip("()"))\n bad_comments\ =\ driver.find_elements_by_xpath("//[@id='comment']/div[2]/div[2]/div[1]/ul/li[7]/a/em")\n for\ comment\ in\ bad_comments:\n print("差评:" + comment.text.strip("()"))\n\n #\ 关闭当前窗口,回到搜索结果页面\n driver.close()\n driver.switch_to.window(driver.window_handles[0])\n\n #\ 生成随机的点击延迟时间\n time.sleep(random.randint(1, 5))\n except\ Exception\ as\ e:\n print(str(e))\n print("--------------------------------------------------") #\ 使用分隔符分隔每本图书信息\n\n#\ 关闭浏览器\ndriver.quit()
原文地址: https://www.cveoy.top/t/topic/pAOP 著作权归作者所有。请勿转载和采集!