鱼C论坛

 找回密码
 立即注册
查看: 2326|回复: 10

[已解决]如何匹配汉字?

[复制链接]
发表于 2017-11-4 10:50:09 | 显示全部楼层 |阅读模式

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

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

x
  1. import requests
  2. import bs4
  3. import re

  4. hd = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
  5. res = requests.get('http://sc.hkexnews.hk/TuniS/www.hkexnews.hk/sdw/search/mutualmarket_c.aspx?t=hk',headers = hd)
  6. html = res.text
  7. soup = bs4.BeautifulSoup(html,'html.parser')
  8. soup.prettify()
  9. node = soup.findAll('td',attrs = {'valign':'top','style':'arial12black'},string = re.compile(r'[\s\u4e00-\u9fa5]+\s'))
  10. print(node)
复制代码


运行结果: []
不知道哪里不对,请高手指点!
最佳答案
2017-11-5 11:29:55
一个比较蠢的方法
  1. a=soup.findAll('td',valign='top')
  2. b=soup.findAll('td',valign='top',nowrap='nowrap')
  3. common=(set(a)^set(b))
  4. common_text=[i.text for i in common]
复制代码

这个可以避免使用正则表达式(其实是我正则不熟

另外公司名字有些是英文,你是想只匹配名字是中文的公司?
  1. common_text=[i.text.split('\r\n')[1].strip() for i in common]
复制代码

这是是格式化文本的
pythonw_2017-11-05_11-29-03.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-11-4 11:03:23 From FishC Mobile | 显示全部楼层
帮顶!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-11-4 11:20:14 | 显示全部楼层
建议用print对每一步的结果进行跟踪,看看到哪一步的时候结果和预期不符
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 11:24:40 | 显示全部楼层
那个,我也不是很确定哈。
bs4里面没有findALL吧,我记得应该是findall
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-4 11:40:01 | 显示全部楼层
新手·ing 发表于 2017-11-4 11:24
那个,我也不是很确定哈。
bs4里面没有findALL吧,我记得应该是findall

两种写法都对,不影响运行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 15:09:56 | 显示全部楼层
John2430 发表于 2017-11-4 11:40
两种写法都对,不影响运行。

抱歉。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 17:49:49 | 显示全部楼层
请说一下你要爬取得信息
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 17:52:02 | 显示全部楼层
TIM截图20171104175030.png

整个网页里面并没有style=arial12black的td标签
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 17:54:21 | 显示全部楼层
把style换成class倒是有东西

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-5 11:29:55 | 显示全部楼层    本楼为最佳答案   
一个比较蠢的方法
  1. a=soup.findAll('td',valign='top')
  2. b=soup.findAll('td',valign='top',nowrap='nowrap')
  3. common=(set(a)^set(b))
  4. common_text=[i.text for i in common]
复制代码

这个可以避免使用正则表达式(其实是我正则不熟

另外公司名字有些是英文,你是想只匹配名字是中文的公司?
  1. common_text=[i.text.split('\r\n')[1].strip() for i in common]
复制代码

这是是格式化文本的
pythonw_2017-11-05_11-29-03.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-6 15:58:59 | 显示全部楼层
chakyam 发表于 2017-11-5 11:29
一个比较蠢的方法

这个可以避免使用正则表达式(其实是我正则不熟

虽然不是我想要的答案,但还是谢谢你的付出,我试过去匹配正则表达式,式子写出来很复杂,而且仍有一个名字没有匹配到。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 16:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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