Mercurial > hg > cc > cirrus_work
changeset 330:c8a575d35fa1 trim
take WARC-Target-URI from Request
| author | Henry S. Thompson <ht@inf.ed.ac.uk> |
|---|---|
| date | Tue, 27 Jan 2026 17:31:27 +0000 |
| parents | d060e49285e2 |
| children | 191127a9a663 |
| files | lib/python/cc/lmh/warc2cdb.py |
| diffstat | 1 files changed, 54 insertions(+), 49 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/python/cc/lmh/warc2cdb.py Tue Jan 27 13:32:13 2026 +0000 +++ b/lib/python/cc/lmh/warc2cdb.py Tue Jan 27 17:31:27 2026 +0000 @@ -59,60 +59,65 @@ m: typing.Match[cython.bytes] | None mm: typing.Match[cython.bytes] | None lmi: cython.bytes - if part==1: + if wtype==warc.REQ and part==1: if (m:=TUPAT.search(buf)): URI=m[1] else: raise ValueError(b"No target URI in %s ??"%buf) - if (md:=DPAT.search(buf)): - DATE=md[1] + else: + # Response + if part==1: + # WARC headers + if (md:=DPAT.search(buf)): + DATE=md[1] + else: + raise ValueError(b"No date in %s ??"%buf) else: - raise ValueError(b"No date in %s ??"%buf) - else: - mm=LMPAT.search(buf) - if mm: - N += 1 - dateTime=mm[1] - if dateTime.endswith(b'GMT'): - if not dateTime.endswith(b' GMT'): - dateTime = dateTime[:-3]+b' GMT' # FFPAT.sub(b'\\1 GMT',dateTime) - try: + # HTTP headers + mm=LMPAT.search(buf) + if mm: + N += 1 + dateTime=mm[1] + if dateTime.endswith(b'GMT'): + if not dateTime.endswith(b' GMT'): + dateTime = dateTime[:-3]+b' GMT' # FFPAT.sub(b'\\1 GMT',dateTime) try: - lmi = b'%d'%int(email.utils.parsedate_to_datetime(dateTime.decode('utf8')).timestamp()) - except OverflowError: - lmi = b'32535215999' - except (TypeError,IndexError,ValueError) as e: - print(dateTime.rstrip(),e,sep='\t',file=sys.stderr) - LOSE += 1 - return - DATE=(DATE.translate(DTAB,DDEL)) - (DATE,LM) = shrink_key.shrink_key(DATE,C_BASE,lmi) - WIN += 1 - try: - URI.decode('ascii') - except UnicodeDecodeError: - UERRS += 1 - # Try just fixing the non-ASCII: - URI = URI.decode('utf-8').encode('ascii', errors='java_unicode') - # Could just assume http, but let's check - if URI.startswith(b'http'): - URI=URI[4:] - else: - NON_HTTP += 1 - l: int = len(LM) - kl: int = (len(DATE)+len(URI)+(len(SEG) if R_T else 0)) - OUT.write(b'+') - OUT.write(b'%d'%kl) - OUT.write(b',') - OUT.write(b'%d'%l) - OUT.write(b':') - OUT.write(DATE) - if R_T: - OUT.write(SEG) - OUT.write(URI) - OUT.write(b'->') - OUT.write(LM) - OUT.write(b'\n') + try: + lmi = b'%d'%int(email.utils.parsedate_to_datetime(dateTime.decode('utf8')).timestamp()) + except OverflowError: + lmi = b'32535215999' + except (TypeError,IndexError,ValueError) as e: + print(dateTime.rstrip(),e,sep='\t',file=sys.stderr) + LOSE += 1 + return + DATE=(DATE.translate(DTAB,DDEL)) + (DATE,LM) = shrink_key.shrink_key(DATE,C_BASE,lmi) + WIN += 1 + try: + URI.decode('ascii') + except UnicodeDecodeError: + UERRS += 1 + # Try just fixing the non-ASCII: + URI = URI.decode('utf-8').encode('ascii', errors='java_unicode') + # Could just assume http, but let's check + if URI.startswith(b'http'): + URI=URI[4:] + else: + NON_HTTP += 1 + l: int = len(LM) + kl: int = (len(DATE)+len(URI)+(len(SEG) if R_T else 0)) + OUT.write(b'+') + OUT.write(b'%d'%kl) + OUT.write(b',') + OUT.write(b'%d'%l) + OUT.write(b':') + OUT.write(DATE) + if R_T: + OUT.write(SEG) + OUT.write(URI) + OUT.write(b'->') + OUT.write(LM) + OUT.write(b'\n') def main(CCdate: str, segment: str, outdir: str, subdir: str, fpat: str, dp: str ): global OUT, N, WIN, LOSE, UERRS, SEG, R_T @@ -131,7 +136,7 @@ print(infile_name,file=sys.stderr) WIN = LOSE = N = UERRS = NON_HTTP = 0 if subdir in ['warc','robotstxt']: - warc.warc(infile_name,LMHline,[warc.RESP],parts=3) + warc.warc(infile_name,LMHline,[warc.REQ,warc.RESP],parts=3) elif subdir == 'crawldiagnostics': warc.warc(infile_name,LMHline,[warc.RESP, warc.REVISIT],parts=3) else:
