鱼C论坛

 找回密码
 立即注册
查看: 2146|回复: 2

[已解决]正则搜索出来的数据只能加载一条

[复制链接]
发表于 2020-12-17 10:35:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Ygh6688 于 2020-12-17 10:41 编辑
  1. <div class="blockcode"><blockquote>import requests
  2. import re
  3. from lxml import etree

  4. def get_url(url):
  5.     headers = {
  6.         'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'

  7.     }
  8.     page_text = requests.get(url,headers=headers).text
  9.     return page_text


  10. def get_page(html):
  11.     tittle = re.compile(r'<ul class="gl-warp.*?class="p-price">.*?<i>(\d+).\d+</i>.*?class="p-name.*?<em>([^¥^/^-].*?)</em>',re.S)

  12.     # tittle = re.compile('<i>(\d+).\d+</i>',re.S)
  13.     # tittle = re.compile('<em>([^¥^/^-].*?)</em>',re.S)
  14.     shangpin = re.findall(tittle,html)
  15.     for i in shangpin:
  16.       yield{
  17.         '价格':i[0],
  18.         '商品':i[1],
  19.       }
  20.     print(shangpin)


  21. def write_file(team):
  22.       pass


  23. def main():
  24.     url = 'https://list.jd.com/list.html?cat=9987,653,655'
  25.     html = get_url(url)
  26.     team = get_page(html)
  27.     for i in team:
  28.         write_file(i)


  29. if __name__ == "__main__":
  30.       main()


复制代码

如果我正常分开的打印价格和商品名称就可以出来所有信息,但是合并在一起就只能打印出一条信息求求大佬指出是我正则的的问题还是其他的


最佳答案
2020-12-17 15:54:24
  1. import requests
  2. from lxml import etree


  3. def main():
  4.     url = 'https://list.jd.com/list.html?cat=9987,653,655'
  5.     headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) '
  6.                              'Chrome/72.0.3626.121 Safari/537.36'}
  7.     r = requests.get(url, headers=headers)
  8.     result = []
  9.     html = etree.HTML(r.text)
  10.     lis = html.xpath('//li[@class="gl-item"]')
  11.     for li in lis:
  12.         p_name = li.xpath('./div/div[4]/a/em/text()')[0]
  13.         p_price = li.xpath('./div/div[3]/strong/i/text()')[0]
  14.         print(p_name, p_price)


  15. if __name__ == "__main__":
  16.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-17 15:54:24 | 显示全部楼层    本楼为最佳答案   
  1. import requests
  2. from lxml import etree


  3. def main():
  4.     url = 'https://list.jd.com/list.html?cat=9987,653,655'
  5.     headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) '
  6.                              'Chrome/72.0.3626.121 Safari/537.36'}
  7.     r = requests.get(url, headers=headers)
  8.     result = []
  9.     html = etree.HTML(r.text)
  10.     lis = html.xpath('//li[@class="gl-item"]')
  11.     for li in lis:
  12.         p_name = li.xpath('./div/div[4]/a/em/text()')[0]
  13.         p_price = li.xpath('./div/div[3]/strong/i/text()')[0]
  14.         print(p_name, p_price)


  15. if __name__ == "__main__":
  16.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-17 16:37:32 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-30 04:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表